/*
 * @Author: your name
 * @Date: 2021-11-02 14:52:04
 * @LastEditTime: 2021-11-02 17:35:31
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \vue-source-code-snanndom\src\mySnabbdom\patch.js
 */
import vnode from "./vnode"
import createElment from './createElement'
import patchVnode from "./patchVnode"
export default function patch(oldVnode, newVnode) {
    // 1.判断传入的第一个参数，是dom节点还是虚拟节点
    if (oldVnode.sel == '' || oldVnode.sel == undefined) {
        // 传入的第一个参数是dom节点，此时要包装为虚拟节点
        // oldVNode.tagName ： DIV 大写的标签名
        oldVnode = vnode(oldVnode.tagName.toLowerCase(), {}, [], undefined, oldVnode)
    }

    // 2.判断oldVNode 和 vNode是否是同一个节点
    if (oldVnode.sel == newVnode.sel && oldVnode.key == newVnode.key) {
        console.log('是同一节点')
        
        patchVnode(oldVnode, newVnode)
    } else {
        console.log('不是同一节点，暴力插入新的，删除旧的：新节点', newVnode + '；老节点：', oldVnode);
        let newVnodeElm = createElment(newVnode);
        // 插入到老节点之前
        if (oldVnode.elm.parentNode && newVnodeElm) {
            oldVnode.elm.parentNode.insertBefore(newVnodeElm, oldVnode.elm)
        }
        // 删除老节点
        oldVnode.elm.parentNode.removeChild(oldVnode.elm)
    }
}